#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

#define MPLAYER_PATH "/pipe"

int main(int argc, char const *argv[])
{
    //查看是否有该管道文件
    if(access(MPLAYER_PATH,F_OK) == -1)  
        {
            //1.创建管道文件c
            int ret = mkfifo(MPLAYER_PATH,0777);
            if(ret == -1)
            {
                printf("mkfifo error!\n");
                return -1;
            }	
        }
    // 1、打开一个管道文件
    int fd = open(MPLAYER_PATH, O_RDWR);
    if (-1 == fd)
    {
        printf("open pipe error!\n");
        return -1;
    }

    // 2、创建一个进程
    pid_t pid = fork();
    if(pid == 0)        // 子进程，输入数据(写数据到文件中)
    {
        while (1)
        {
            // 写入数据到管道中
            char buf[1024] = {0};
            printf("子进程,请写入想对父母说的话:\n");
            scanf("%s", buf);
            write(fd, buf, strlen(buf));
        }
        return 0;
    }
    if(pid > 0)         // 父进程,输出数据(从文件中读取数据)
    {
        while (1)
        {
            // 从管道中读取数据
            char buf[1024] = {0};
            read(fd, buf, sizeof(buf));
            printf("父进程,读取的管道数据为:%s\n", buf);
        }
        
    }
    return 0;
}
